// T到底是啥,可以理解为类型变量？看你调用的时候传的啥
// 泛型的作用：复用   泛型 === 复用
// 泛型函数
function getId<T> (id: T): T {
  // 对T这个类型做处理
  return id
}

getId<string>('张三')
getId(111)

// 泛型别名
type Account = {
  token: string
  refreshToken: string
}

type Profile = {
  likeNumber: number
  score: number
}

type Data<T> = {
  code: number
  message: string
  data: T
}

type AccountData = {
  code: number
  message: string
  data: Account
}
// 等价于下面的写法
// type AccountData = Data<Account>
// code: 0 ,message: '请求成功', data: {token:'xxx',refreshToken:'yyy'}

type ProfileData = Data<Profile>
// code: 0 ,message: '请求成功', data: {likeNumber: 1, score: 100}

// const array1: string[] = ['a', 'b', 'c']
const array1: Array<string> = ['a', 'b', 'c']
array1.forEach((item, index, array) => {})

// const array2: number[] = [1, 2, 3]
const array2: Array<number> = [1, 2, 3]
array2.forEach((item, index, array) => {})

// 泛型接口
interface IdFn<T> {
  id: () => T
  ids: () => T[]
}

const idObj: IdFn<number> = {
  id () {
    return 1
  },
  ids () {
    return [1, 2]
  }
}

const idObj2: IdFn<string> = {
  id () {
    return 'a'
  },
  ids () {
    return ['a', 'b']
  }
}

export {}
